<?php
/**
 * @file
 * "Callbacks" para la administración de alumnos.
 */

/**
 * Actualiza la información de los usuarios.
 * 
 * @param $datos     Arreglo con los datos ingresados por el usuario.
 * @param $categoria Categoría actualmente activa
 **/
function alumnos_actualizar($datos, $categoria)
{
    /* instrucción SQL que se usará */
    $sql = "UPDATE {users_alumnos} SET ";

    switch($categoria)
    {
        /* datos académicos */
        case "sph-academico":   $sql .= "matricula = '%s', carrera = '%d' WHERE uid = %d";
                                db_query($sql, $datos['matricula'],
                                               $datos['carrera'],
                                               $datos['uid']);
                                break;

        /* datos laborales */
        case "sph-laboral":     $sql .= "nombre_empresa = '%s', puesto = '%s', ".
                                        "telefono_trabajo = '%s', extension_trabajo = '%s'".
                                        " WHERE uid = %d";
                                db_query($sql, $datos['empresa'],
                                               $datos['puesto'],
                                               $datos['telefonol'],
                                               $datos['extension'],
                                               $datos['uid']);
                                break;

        /* datos personales */
        case "sph-personal":    $sql .= "nombre = '%s', apellido_paterno = '%s', ".
                                        "apellido_materno = '%s', telefono_particular = '%s' ".
                                        " WHERE uid = %d";
                                db_query($sql, $datos['nombre'],
                                               $datos['apellidop'],
                                               $datos['apellidom'],
                                               $datos['telefonop'],
                                               $datos['uid']);
                                break;
    }
    drupal_goto('user/'.$datos['uid']);
}

/**
 * Formulario mostrado cuando los usuarios editan su información personal.
 * 
 * @param $categoria Categoría actualmente activa.
 * @param $edit      Arreglo con la información enviada por el usuario.
 * @return  $form    Arreglo asociativo con la definición de los elementos del formulario.
 **/
function alumnos_editar($categoria, $edit)
{
    $form = array();
    switch($categoria)
    {
        /* datos académicos */
        case "sph-academico":   return alumnos_elementos_academicos($edit);

        /* datos laborales */
        case "sph-laboral":     return alumnos_elementos_laborales($edit);

        /* datos personales */
        case "sph-personal":    return alumnos_elementos_personales($edit);
    }
    
    return $form;
}

/**
 * Acciones a realizar cuando se elimina un usuario.
 *
 * @param $uid Identidicador del usuario eliminado.
 **/
function alumnos_eliminar($uid)
{
    db_query("DELETE FROM {users_alumnos} WHERE uid = %d", $uid);
}

/**
 * Inserta los datos del formualrio de registro a la base de datos.
 * 
 * @param $datos  Arreglo con los datos ingresados por el usuario.
 **/
function alumnos_insertar($datos)
{
    /* instrucción SQL que se usará */
    $sql = "INSERT INTO {users_alumnos} VALUES (%d, '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s')";
    
    /* inserta los datos en la base de datos */
    db_query($sql, $datos['uid'],
                   $datos['nombre'],
                   $datos['apellidop'],
                   $datos['apellidom'],
                   $datos['matricula'],
                   $datos['carrera'],
                   $datos['telefonop'],
                   $datos['empresa'],
                   $datos['puesto'],
                   $datos['telefonol'],
                   $datos['extension']);
}

/**
 * Elemetos extras para el formulario de registro, los elementos son mostrados cuando un
 * nuevo usuario se registra.
 * 
 * @return  $form    Arreglo asociativo con la definición de los elementos del formulario.
 **/
function alumnos_registrar()
{
    $edit = array();

    /* carga los fieldsets */
    $form = alumnos_fieldset();

    /* carga los elementos académicos */
    $form['académica'] += alumnos_elementos_academicos($edit);
    
    /* carga los elementos personales */
    $form['personal'] += alumnos_elementos_personales($edit);
    
    /* carga los elementos laborales */
    $form['laboral'] += alumnos_elementos_laborales($edit);

    return $form;
}

/**
 * Crea categorías extras para estructurar la información de los usuarios
 * 
 * @return $categorias Arreglo con la definición de las categorías
 **/
function alumnos_categorias()
{
    /* arreglo que define las categorías */
    $categorias = array
    (
        array
        (
            'name' => "sph-academico",
            'title' => t("Información académica"),
            'weight' => 2
        ),
        array
        (
            'name' => "sph-personal",
            'title' => t("Información personal"),
            'weight' => 1
        ),
        array
        (
            'name' => "sph-laboral",
            'title' => t("Información laboral"),
            'weight' => 3
        )
    );

    return $categorias;
}

/**
 * Verifica si existen los datos de perfil de un usuario, si no es así los crea con infor-
 * mación vacía, si existe no hace nada.
 **/
function alumnos_cuenta($uid)
{
    /* verifica si el usuario está en la tabla alumnos */
    $existe = db_result(db_query("SELECT COUNT(*) FROM {users_alumnos} WHERE uid = %d", $uid));
    
    /* si el usuario no existe en la tabla, entonces lo inserta */
    if($existe == 0)
    {
        $datos = array();
        $datos['uid'] = $uid;
        alumnos_insertar($datos);
    }
}

/**
 * Define "fieldsets" para mostrar estructuradamente los elementos del formulario de re-
 * gistro de los nuevos usuarios.
 *
 * @return $form Arreglo asociativo con la definición de los elementos. 
 **/
function alumnos_fieldset()
{
    $form['académica'] = array
    (
        '#type' => 'fieldset',
        '#title' => t("Información académica"),
        '#weight' => 0
    );
    
    $form['laboral'] = array
    (
        '#type' => 'fieldset',
        '#title' => t("Información laboral"),
        '#weight' => 2
    );
    
    $form['personal'] = array
    (
        '#type' => 'fieldset',
        '#title' => t("Información personal"),
        '#weight' => 1
    );
    
    return $form;
}

/**
 * Elementos del formulario que recaban información personal.
 * 
 * @param $edit      Arreglo con la información enviada por el usuario.
 * @return $form arreglo asociativo con la definición de los elementos.
 */
function alumnos_elementos_personales($edit)
{
    /* nombre de pila */
    $form['nombre'] = array
    (
        '#default_value' => $edit['nombre'],
        '#description' => "Escribe tu nombre o nombres, omite tus apellidos",
        '#element_validate' => array('validar_elemento_nombre'),
        '#maxlength' => 45,
        '#required' => true,
        '#title' => t("Nombre(s)"),
        '#type' => 'textfield',
        '#weight' => 0
    );
    
    /* apellido paterno */
    $form['apellidop'] = array
    (
        '#default_value' => $edit['apellidop'],
        '#description' => "Apellido o apellidos paternos",
        '#element_validate' => array('validar_elemento_nombre'),
        '#maxlength' => 45,
        '#required' => true,
        '#title' => t("Apellido(s) paterno"),
        '#type' => 'textfield',
        '#weight' => 1
    );
    
    /* apellido materno */
    $form['apellidom'] = array
    (
        '#default_value' => $edit['apellidom'],
        '#description' => "Apellido o apellidos maternos",
        '#element_validate' => array('validar_elemento_nombre'),
        '#maxlength' => 45,
        '#title' => t("Apellido(s) materno"),
        '#type' => 'textfield',
        '#weight' => 2
    );

    /* teléfono particular */
    $form['telefonop'] = array
    (
        '#default_value' => $edit['telefonop'],
        '#description' => "Escribe tu teléfono particular, omitie guiones y espacios.",
        '#element_validate' => array('validar_elemento_telefono'),
        '#maxlength' => 12,
        '#required' => true,
        '#title' => "Teléfono particular",
        '#type' => 'textfield',
        '#weight' => 3
    );
    
    return $form;
}

/**
 * Elementos del formulario que recaban información académica.
 * 
 * @param $edit      Arreglo con la información enviada por el usuario.
 * @return $form arreglo asociativo con la definición de los elementos.
 */
function alumnos_elementos_academicos($edit)
{
    /* matrícula */
    $form['matricula'] = array
    (
        '#default_value' => $edit['matricula'],
        '#description' => "Matrícula de alumno o número de empleado",
        '#element_validate' => array('validar_elemento_matricula'),
        '#maxlength' => 9,
        '#required' => true,
        '#title' => "Matrícula",
        '#type' => 'textfield',
        '#weight' => 0,
    );

    /* datos de las carreras existente en la BD */
    $r = db_query("SELECT id_carrera, nombre FROM {carreras}");
    while($tmp = db_fetch_array($r))
        $carreras[$tmp['id_carrera']] = $tmp['nombre'];
    
    /* lista de selección de la carrera */
    $form['carrera'] = array
    (
        '#default_value' => $edit['carrera'],
        '#description' => "Selecciona tu carrera.",
        '#options' => $carreras,
        '#required' => true,
        '#title' => "Carrera",
        '#weight' => 1,
        '#type' => 'select'
    );
    
    return $form;
}

/**
 * Elementos del formulario que recaban información laboral.
 * 
 * @param $edit      Arreglo con la información enviada por el usuario.
 * @return $form arreglo asociativo con la definición de los elementos.
 */
function alumnos_elementos_laborales($edit)
{
    $form['empresa'] = array
    (
        '#default_value' => $edit['empresa'],
        '#description' => "Nombre completo de la empresa en la que laboras",
        '#title' => "Nombre de la empresa",
        '#type' => 'textfield',
        '#weight' => 0
    );
    
    $form['puesto'] = array
    (
        '#default_value' => $edit['puesto'],
        '#description' => "Puesto o cargo; ejemplo: Programador",
        '#title' => "Puesto",
        '#type' => 'textfield',
        '#weight' => 1
    );

    $form['telefonol'] = array
    (
        '#default_value' => $edit['telefonol'],
        '#description' => "Teléfono de la empresa en la que la laboras",
        '#element_validate' => array('validar_elemento_telefono'),
        '#maxlength' => 12,
        '#size' => 20,
        '#title' => "Teléfono",
        '#type' => 'textfield',
        '#weight' => 2
    );
    
    $form['extension'] = array
    (
        '#default_value' => $edit['extension'],
        '#description' => "Extensión telefónica",
        '#element_validate' => array('validar_elemento_telefono'),
        '#maxlength' => 4,
        '#size' => 4,
        '#title' => "Extensión",
        '#type' => 'textfield',
        '#weight' => 3
    );

    return $form;
}
/**
 * Valida la matrícula que el usuario introduce en el formulario de registro
 * 
 * @param $elem arreglo con la información del elemento del formulario que almacena la matrícula.
 **/
function validar_elemento_matricula($elem)
{
    $patron = "^(2(0|1)|9)[[:digit:]][1-3][[:digit:]]{5}$";
    if(!ereg($patron, $elem['#value']))
        form_set_error('matricula', "Matrícula no válida");
}

/**
 * Valida un número telefónico
 * 
 * @param $elem arreglo con la información del elemento del formulario que almacena el teléfono.
 **/
function validar_elemento_telefono($elem)
{
    if(!is_numeric($elem['#value']))
        form_set_error($elem['#name'], "Teléfono no válido");
}

/**
 * Visualiza la información en la página del perfil de usuario.
 */
function alumnos_ver_perfil($alumno)
{
    /* carga las categorías */
    $categorias = alumnos_categorias();
    
    /* obtiene la información del alumno */
    $r = db_query("SELECT * FROM {users_alumnos} WHERE uid = %d", $alumno->uid);
    $datos_a = db_fetch_object($r);
    
    foreach($categorias as $cid => $datos)
    {
        $cat = $datos['name'];
        $alumno->content[$cat] = array('#title' => $datos['title'],
                                       '#type'  => 'user_profile_category',
                                       '#weight' => $cid);
        
        switch($cat)
        {
            case 'sph-academico': $alumno->content[$cat]['matricula'] = array
                                  (
                                      '#title' => t('Matrícula'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->matricula,
                                      '#weight' => 0
                                  );
                                  
                                  $alumno->content[$cat]['carrera'] = array
                                  (
                                      '#title' => t('Carrera'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->carrera,
                                      '#weight' => 1
                                  );
                                  break;
            case 'sph-laboral':   $alumno->content[$cat]['nombre_empresa'] = array
                                  (
                                      '#title' => t('Nombre de la empresa'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->nombre_empresa,
                                      '#weight' => 0
                                  );

                                  $alumno->content[$cat]['puesto'] = array
                                  (
                                      '#title' => t('Puesto'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->puesto,
                                      '#weight' => 1
                                  );
                                  
                                  $alumno->content[$cat]['telefono_trabajo'] = array
                                  (
                                      '#title' => t('Teléfono'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->telefono_trabajo,
                                      '#weight' => 2
                                  );
                                  
                                  $alumno->content[$cat]['extension'] = array
                                  (
                                      '#title' => t('Extensión'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->extension_trabajo,
                                      '#weight' => 3
                                  );
                                  
                                  break;

            case 'sph-personal':  $alumno->content[$cat]['nombre'] = array
                                  (
                                      '#title' => t('Nombre'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->nombre.' '.
                                                  $datos_a->apellido_paterno.' '.
                                                  $datos_a->apellido_materno,
                                      '#weight' => 0
                                  );
                                  
                                  $alumno->content[$cat]['telefono_particular'] = array
                                  (
                                      '#title' => t('Teléfono particular'),
                                      '#type'  => 'user_profile_item',
                                      '#value' => $datos_a->telefono_particular,
                                      '#weight' => 1
                                  );
                                  break;
        }
    }
}
?>